const mapUtils = require('../../libs/mapsdk.js');
Page({

  /**
   * 页面的初始数据
   */
  data: {
    statusBarHeight: 0,
    gasStations: [],
    markers: [],
    longitude: 0,
    latitude: 0,
    scale: 14,
    title: '',
    lat: 0,
    lng: 0,
    showMap: true,
    loading: true, // 添加加载状态
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    // 获取状态栏高度
    const systemInfo = wx.getSystemInfoSync();
    const title = options.title
    wx.setNavigationBarTitle({
      title: title,
    })
    this.setData({
      statusBarHeight: systemInfo.statusBarHeight,
      title:title || '附近服务站',
      loading: true
    });

    // 显示加载提示
    wx.showLoading({
      title: '正在定位...',
      mask: true
    });

    // 获取位置信息
    this.getLocationAndLoadData(options);
  },

  // 获取位置并加载数据
  getLocationAndLoadData(options) {
    wx.getLocation({
      type: 'gcj02',
      success: locationRes => {
        const { latitude, longitude } = locationRes;
        console.log('定位成功:', latitude, longitude);
        
        this.setData({
          latitude: latitude,
          longitude: longitude,
          lat: latitude,
          lng: longitude
        });

        // 更新加载提示
        wx.showLoading({
          title: '正在搜索附近服务站...',
          mask: true
        });

        // 加载服务站数据
        this.loadStationData(options.title);
      },
      fail: err => {
        console.error('定位失败：', err);
        wx.showToast({
          title: '定位失败，使用默认位置',
          icon: 'none'
        });
        
        // 设置默认位置（北京）
        this.setData({
          latitude: 39.908692,
          longitude: 116.397477,
          lat: 39.908692,
          lng: 116.397477
        });

        // 加载服务站数据
        this.loadStationData(options.title);
      }
    });
  },

  // 加载服务站数据
  loadStationData(title) {
    mapUtils.searchNearby(title, res => {
      console.log('搜索结果:', res);
      
      // 处理标记点
      const markers = res.map((item, index) => ({
        id: index + 1,
        latitude: item.location.lat,
        longitude: item.location.lng,
        title: item.title,
        iconPath: '/assets/icons/marker.png',
        width: 30,
        height: 30
      }));

      // 为每个服务站计算预计时间
      const processedStations = res.map(item => {
        const estimatedTime = this.calculateEstimatedTime(item.distance || item.distanceText);
        return {
          ...item,
          estimatedTime: estimatedTime
        };
      });

      console.log('处理后的服务站数据:', processedStations);
      
      this.setData({
        gasStations: processedStations,
        markers: markers,
        loading: false
      });

      // 隐藏加载提示
      wx.hideLoading();

      // 如果没有数据，显示提示
      if (processedStations.length === 0) {
        wx.showToast({
          title: '附近暂无服务站',
          icon: 'none'
        });
      }
    });
  },

  // 地图展开/收起
  zooming() {
    this.setData({
      showMap: !this.data.showMap
    });
  },

  // 返回上一页
  handleBack() {
    wx.navigateBack();
  },

  // 移动到当前位置
  moveToLocation() {
    const mapCtx = wx.createMapContext('gasStationMap');
    mapCtx.moveToLocation();
  },

  // 地图加载完成
  onMapReady(e) {
    console.log('地图加载完成', e);
  },

  // 计算预计时间
  calculateEstimatedTime(distance) {
    if (!distance) return '计算中';

    // 提取距离数值（支持多种格式）
    const distanceStr = distance.toString().toLowerCase();
    let distanceInKm = 0;

    // 匹配数字和单位
    const kmMatch = distanceStr.match(/(\d+\.?\d*)\s*km/);
    const mMatch = distanceStr.match(/(\d+\.?\d*)\s*m/);
    const numMatch = distanceStr.match(/(\d+\.?\d*)/);

    if (kmMatch) {
      distanceInKm = parseFloat(kmMatch[1]);
    } else if (mMatch) {
      distanceInKm = parseFloat(mMatch[1]) / 1000;
    } else if (numMatch) {
      // 如果是纯数字，假设单位是米
      distanceInKm = parseFloat(numMatch[1]) / 1000;
    } else {
      return '未知';
    }

    // 根据距离计算预计时间（考虑交通状况）
    let estimatedMinutes = 0;

    if (distanceInKm <= 0.3) {
      // 300m以内，步行
      estimatedMinutes = Math.max(1, Math.ceil(distanceInKm * 10));
    } else if (distanceInKm <= 1) {
      // 1km以内，慢速行驶
      estimatedMinutes = Math.ceil(distanceInKm * 6 + 2);
    } else if (distanceInKm <= 5) {
      // 5km以内，城市道路
      estimatedMinutes = Math.ceil(distanceInKm * 3 + 3);
    } else if (distanceInKm <= 15) {
      // 15km以内，快速路
      estimatedMinutes = Math.ceil(distanceInKm * 2 + 5);
    } else {
      // 15km以上，高速路段
      estimatedMinutes = Math.ceil(distanceInKm * 1.2 + 10);
    }

    // 格式化输出
    if (estimatedMinutes < 60) {
      return `${estimatedMinutes}分钟`;
    } else {
      const hours = Math.floor(estimatedMinutes / 60);
      const minutes = estimatedMinutes % 60;
      return minutes > 0 ? `${hours}小时${minutes}分钟` : `${hours}小时`;
    }
  },

  // 导航到服务站
  navigateToStation(e) {
    const item = e.currentTarget.dataset.item;
    if (!item) return;

    wx.openLocation({
      latitude: item.location.lat,
      longitude: item.location.lng,
      name: item.title,
      address: item.address,
      scale: 18
    });
  },

  // 拨打电话
  callStation(e) {
    const item = e.currentTarget.dataset.item;
    if (!item || !item.tel) {
      wx.showToast({
        title: '暂无电话信息',
        icon: 'none'
      });
      return;
    }

    wx.makePhoneCall({
      phoneNumber: item.tel,
      fail: () => {
        wx.showToast({
          title: '拨打失败',
          icon: 'none'
        });
      }
    });
  },

  // 页面显示时刷新数据
  onShow() {
    // 如果数据为空，重新加载
    if (this.data.gasStations.length === 0 && !this.data.loading) {
      this.setData({ loading: true });
      this.loadStationData(this.data.title);
    }
  },

  // 下拉刷新
  onPullDownRefresh() {
    this.setData({ loading: true });
    this.loadStationData(this.data.title);
    wx.stopPullDownRefresh();
  }
}) 